C++11 并发学习(二)


学习自大神博客

线程详解

具体源码的大家有兴趣的可以去查看c++ 标准委员会的官方文档

在这里我主要讲一下他们的主要结构以及主要用法

< thread>

  1. std::thread 简单例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <iostream> // std::cout
#include <thread> // std::thread
void thread_task() {
std::cout << "hello thread" << std::endl;
}
int main(int argc, const char *argv[])
{
std::thread t(thread_task);
t.join();
return EXIT_SUCCESS;
}

< mutex>

std::mutex 是C++11 中最基本的互斥量,std::mutex 对象提供了独占所有权的特性——即不支持递归地对 std::mutex 对象上锁,而 std::recursive_lock 则可以递归地对互斥量对象上锁。

①. Mutex 系列类(四种)

  • std::mutex,最基本的 Mutex 类。
  • std::recursive_mutex,递归 Mutex 类。
  • std::time_mutex,定时 Mutex 类。
  • std::recursive_timed_mutex,定时递归 Mutex 类

②. Lock 类(两种)

  • std::lock_guard,与 Mutex RAII (资源获取即初始化)相关,方便线程对互斥量上锁。
  • std::unique_lock,与 Mutex RAII (资源获取即初始化)相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。

< condition_variable>

< condition_variable > 头文件主要包含了与条件变量相关的类和函数。与条件变量相关的类包括 std::condition_variable 和 std::condition_variable_any,还有枚举类型std::cv_status。另外还包括函数 std::notify_all_at_thread_exit()

Linux 下是使用 Pthread 库中的 pthreadcond*() 函数来实现条件变量相关的功能

< future>

C++11 标准中与异步任务系相关的类型主要是以下四种 std::promise,std::packaged_task(std::promise,std::packaged_task 也称为异步任务的提供者 Provider,此外 std::async 也可以作为异步任务的提供者,不过 std::async 并不是类,而是函数,本章后面会详细介绍异步任务的提供者 Provider),std::future,std::shared_future。另外 < future> 中还定义一些辅助的类,例如: std::future_error,std::future_errc,std::status,std::launch。

之前也有提到,主要是用来实现异步

< atomic>

关于C++11的原子操作之前我有过笔记,下图

好了,关于 C++11 的新特性大致的梳理了一遍,接下来我们先看看之前提到的那个 C++11 的线程池具体是怎么实现的吧